package com.jrx.anytxn.param.service.product;

import com.jrx.anytxn.i18n.response.TxnPage;
import com.jrx.anytxn.common.exception.TxnBizException;
import com.jrx.anytxn.common.exception.TxnException;
import com.jrx.anytxn.param.dto.product.AmortMethodReq;
import com.jrx.anytxn.param.dto.product.AmortMethodRes;
import com.jrx.anytxn.param.entity.PrAmortMethod;

import java.util.List;

/**
 * @ClassName IAmortMethodService
 * @Description: 还款方式service接口
 * @Author yf
 * @Date 2019/7/29 0029
 * @Version V1.0
 **/
public interface IAmortMethodService {

    /**
     * 根据租户ID分页查询信息
     *
     * @param pageNum  页码
     * @param pageSize 页大小
     * @param tenantId 租户ID
     * @return com.jrx.anytxn.common.data.TxnPage<com.jrx.anytxn.param.dto.product.AmortMethodRes>
     * @author fan.yang
     * date: 2019/10/14 0014 下午 14:47
     */
    TxnPage<AmortMethodRes> findAllPageByTenId(Integer pageNum, Integer pageSize, String tenantId) throws TxnException;

    /**
     * 通过租户ID和还款方式ID查询信息
     *
     * @param amortMethodId 还款方式ID
     * @param tenantId      租户ID
     * @return com.jrx.anytxn.param.dto.product.AmortMethodRes
     * @author fan.yang
     * date: 2019/10/14 0014 下午 14:59
     */
    AmortMethodRes findByAmortIdIdAndTenId(String amortMethodId, String tenantId) throws TxnException;

    /**
     * 根据租户ID和还款方式ID编辑信息
     *
     * @param amortMethodReq 还款方式请求参数
     * @return com.jrx.anytxn.param.dto.product.AmortMethodRes
     * @author fan.yang
     * date: 2019/10/14 0014 下午 15:01
     */
    AmortMethodRes modifyAmortMethod(AmortMethodReq amortMethodReq);

    /**
     * 增加信息
     *
     * @param amortMethodReq 还款方式请求参数
     * @return com.jrx.anytxn.param.dto.product.AmortMethodRes
     * @author fan.yang
     * date: 2019/10/14 0014 下午 15:28
     */
    AmortMethodRes addAmortMethod(AmortMethodReq amortMethodReq) throws TxnException;

    /**
     * 根据租户ID和还款方式ID删除此信息
     *
     * @param tenantId      租户ID
     * @param organizationId 机构ID
     * @param amortMethod 还款方式
     * @return java.lang.Boolean
     * @author fan.yang
     * date: 2019/10/14 0014 下午 15:35
     */
    Boolean removeByTenIdAndAmortMethodId(String tenantId, String organizationId, String amortMethod) throws TxnException;

    /**
     * 根据机构号和租户Id查询还款方式表信息
     *
     * @param organizationId 机构号
     * @param tenantId       租户ID
     * @return java.util.List<com.jrx.anytxn.param.dto.product.AmortMethodRes>
     * @author fan.yang
     * date: 2019/10/14 0014 下午 15:42
     */
    List<AmortMethodRes> getAmortMethodByOrgIdAndTenId(String organizationId, String tenantId);

    /**
     * 通过机构与还款方式查询还款方式
     *
     * @param chargeOption 还款方式
     * @param organizationId 机构id
     * @param tenantId 租户id
     * @return 还款方式
     * @throws TxnBizException
     */
    PrAmortMethod findByChargerOptionAndId(String chargeOption, String organizationId, String tenantId) throws TxnBizException;

    /**
     * 通过机构与还款方式id 集合与租户
     *
     * @param amortMethodList 还款方式id集合
     * @param organizationId 机构id
     * @param tenantId 租户id
     * @return 还款方式
     * @throws TxnBizException
     */
    List<PrAmortMethod>  findAmortMethodByAmortMethodIdsAndTenId(List<String> amortMethodList, String organizationId, String tenantId) throws TxnBizException;

}
